package cn.song.freight.domain.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.math.BigDecimal;

/**
 * 运费计算请求DTO
 *
 * @author SongRenShuo
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "运费计算请求参数")
public class FreightCalculationRequestDTO {

    /**
     * 货物重量（kg）
     */
    @NotNull(message = "货物重量不能为空")
    @Positive(message = "货物重量不能为负数")
    @ApiModelProperty(value = "货物重量（kg）", required = true, example = "2.5")
    private BigDecimal weight;

    /**
     * 货物长度（cm）
     */
    @ApiModelProperty(value = "货物长度（cm）", example = "30.0")
    private BigDecimal length;

    /**
     * 货物宽度（cm）
     */
    @ApiModelProperty(value = "货物宽度（cm）", example = "20.0")
    private BigDecimal width;

    /**
     * 货物高度（cm）
     */
    @ApiModelProperty(value = "货物高度（cm）", example = "15.0")
    private BigDecimal height;

    /**
     * 目标区域ID（可选，当不提供地址层级参数时必填）
     */
    @ApiModelProperty(value = "目标区域ID（可选，当不提供地址层级参数时必填）", example = "2")
    private Long toAreaId;

    /**
     * 目标区域省份名称（可选，用于地址层级匹配）
     */
    @ApiModelProperty(value = "目标区域省份名称（可选，用于地址层级匹配）", example = "北京市")
    private String toProvinceName;

    /**
     * 目标区域城市名称（可选，用于地址层级匹配）
     */
    @ApiModelProperty(value = "目标区域城市名称（可选，用于地址层级匹配）", example = "北京市")
    private String toCityName;

    /**
     * 目标区域区县名称（可选，用于地址层级匹配）
     */
    @ApiModelProperty(value = "目标区域区县名称（可选，用于地址层级匹配）", example = "朝阳区")
    private String toDistrictName;

    /**
     * 指定使用的策略ID（可选，如果不指定则自动匹配）
     */
    @ApiModelProperty(value = "指定使用的策略ID（可选）", example = "1")
    private Long strategyId;

    /**
     * 仓库编码（用于策略分配匹配）
     */
    @ApiModelProperty(value = "仓库编码（可选）")
    private String warehouseCode;

    /**
     * 物流公司编码（用于策略分配匹配）
     */
    @ApiModelProperty(value = "物流公司编码（可选）")
    private String logisticsCompanyCode;

    /**
     * 去否去除省市区关键字模糊匹配（可选）
     */
    @ApiModelProperty(value = "去否去除省市区关键字模糊匹配（可选）")
    private Boolean whetherToRemoveFuzzyMatchingProvincialAndMunicipalKeywords;
}
